package com.dollar.producer_consumer.orderConsume;

import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class ProcessThreadPool {
    private ExecutorService threadPool = Executors.newFixedThreadPool(3);

    public ProcessThreadPool() {
        RequestQueue instance = RequestQueue.getInstance();
        for (int i = 0; i < 3; i++) {
            ArrayBlockingQueue<String> queue = new ArrayBlockingQueue<String>(100);
            instance.addQueue(queue);
            /**
             * 线程池模式中，一个线程工作的最小单位是任务
             * 也就是说，线程池能够提供保证，某个任务是一定被一个固定线程来完成的。
             * 直到这个任务执行结束，与之对应的线程才可能被回收去干别的。
             * 一个任务只能分配给一个线程
             * 一个线程可以完成一个任务后才会再去完成其他任务。
             */
            threadPool.submit(new ProcessTask(queue));
        }
    }

    public static void initPool() {
        new ProcessThreadPool();
    }
}
